package com.demo.udp;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * @author gy
 * @date 2022/5/4
 */
public class UDPSenderB {
    public static void main(String[] args) throws Exception{
        //1、 创建一个 DatagramSocket 对象，准备在9998接收数据
        DatagramSocket socket = new DatagramSocket(9998);
        //2、 将需要发送的数据，封装到 DatagramPacket对象中
        byte[] data = "hello 明天一起去爬山".getBytes();
        DatagramPacket packet =
                new DatagramPacket(data, data.length, InetAddress.getByName("192.168.27.1"), 9999);
        // 发送打包好的数据
        socket.send(packet);

        //-----------------------------------------------------

        // 接收 A 端的消息
        // 构建一个 DatagramPacket 对象 准备接收数据
        // 在前面讲解 UDP 协议是，一个 UDP 数据包最大为 64K
        byte[] buf = new byte[1024];
        packet = new DatagramPacket(buf, buf.length);
        //调用接收方法，将通过网络传输的 DatagramPacket 对象 听啊冲到 packet对象
        // 注意：当有数据包发送到本机 的 9998 端口时，就会接收到数据
        //      如果没有数据包发送到 9998 端口时，就会阻塞等待
        socket.receive(packet);

        //可以把packet 进行拆包，取出数据，并显示
        // 实际接收到数据字节长度
        int length = packet.getLength();
        // 实际接收到的数据
        data = packet.getData();
        String s = new String(data, 0, length);
        System.out.println(s);

        //-----------------------------------------------------


        // 关闭资源
        socket.close();
        System.out.println("B端退出");
    }
}
